package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.DTO.property.AppUserProjectUpdateDTO;
import com.itlong.cloud.POJO.PO.AppUserProjectPO;
import com.itlong.cloud.POJO.PO.ProjectPO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *       物业系统用户与项目关系信息接口
 * </desc>
 *
 * @createDate 2017/09/21
 */
@Mapper
@Repository
public interface IPropertyAppUserProjectDao extends IAbstractBaseDao<AppUserProjectPO> {
    /**
     * <desc>
     *      保存用户与项目关系信息
     * </desc>
     * @param params
     * @return
     * @author zhangs
     * @createDate 2017/09/21
     */
    Integer save(Map<String, Object> params);

    /**
     * <desc>
     *      更新用户项目状态
     * </desc>
     * @param params
     * @return
     * @author zhangs
     * @createDate 2017/09/29
     */
    Integer updateUserProjectStatus(Map<String, Object> params);

    /**
     * <desc>
     *      根据住户项目关系PO查询住户项目关系PO
     * <desc/>
     *
     * @param appUserProjectPO 住户项目关系PO
     * @return AppUserProjectPO 住户项目关系PO
     * @author zhangs
     * @createDate 2017-11-16
     */
    List<AppUserProjectPO> getUserProject(AppUserProjectPO appUserProjectPO);

    /**
     * <desc>
     *     APP端_首页_申请房屋认证，查询用户与项目关系
     * </desc>
     * @param appUserProjectPO
     * @return
     * @author cuiduanwu
     * @createDate 2017/12/10
     */
    AppUserProjectPO getPreUserProject(AppUserProjectPO appUserProjectPO);

    /**
     * <desc>
     *     APP端_首页_申请房屋认证,查询项目最大授权数
     * </desc>
     * @param projectId
     * @return
     * @author cuiduanwu
     * @createDate 2017-12-14
     */
    Integer getProjectAuthNum(@Param("projectId") String projectId);

    /**
     * <desc>
     *     APP端_首页_申请房屋认证,查询项目办公最大授权数
     * </desc>
     * @param projectId
     * @return
     * @author Juguang.S
     * @createDate 2020-03-27
     */
    Integer getProjectAuthNumByOffice(@Param("projectId") String projectId);

    /**
     * <desc>
     *     APP端_首页_申请房屋认证，更新用户与项目关系
     * </desc>
     * @param appUserProjectPO
     * @return
     * @author cuiduanwu
     * @createDate 2017/12/10
     */
    Integer updatePreUserProject(AppUserProjectPO appUserProjectPO);

    /**
     * <desc>
     *      更新用户信息
     * </desc>
     * @param appUserProjectPO App用户项目关系实体对象
     * @return Integer
     * @author zhangs
     * @createDate 2017/09/26
     */
    Integer update(AppUserProjectPO appUserProjectPO);
//    Integer updateUserProjectStatus(String[] userIds, String projectId, String userProjectStatus, Date date);

    /**
     * <desc>
     *      获取小区中所有住户项目信息
     * </desc>
     * @param param 查询条件
     * @return Integer 住户数量
     * @author zhangs
     * @createDate 2017/11/25
     */
    Integer getAllHouseProjectInfo(Map<String, Object> param);

    /**
     * <desc>
     *      添加App用户信息前判断用户是否在当前项目中存在
     * <desc/>
     *
     * @param param 条件
     * @return List<AppUserProjectPO> 住户项目信息
     * @author zhangs
     * @createDate 2017/09/26
     */
    List<AppUserProjectPO> getUserAtProjectByPhoneNum(Map<String, Object> param);


    /**
     * <desc>
     *      添加App用户信息前判断用户是否在当前项目中存在
     * <desc/>
     *
     * @param param 条件
     * @return List<AppUserProjectPO> 住户项目信息
     * @author zhangs
     * @createDate 2017/09/26
     */
    List<AppUserProjectPO> getUserAtProject(Map<String, Object> param);


    /**
     * <desc>
     *      检查用户手机号是否存在
     * <desc/>
     *
     * @param param 条件
     * @return
     * @author pengwei
     * @createDate 2020/12/10
     */
    Integer  checkAppUserPhoneExists(Map<String, Object> param);
    /**
     * <desc>
     *      获取住户项目SIP相关信息
     * <desc/>
     *
     * @param param 条件
     * @return List<AppUserProjectUpdateDTO> 住户项目信息
     * @author zhangs
     * @createDate 2017/11/28
     */
    List<AppUserProjectUpdateDTO> getUserProjectSip(Map<String, Object> param);

    /**
     * <desc>
     *      根据住户项目关系PO查询住户项目关系PO
     * <desc/>
     *
     * @param appUserProjectPO 住户项目关系PO
     * @return AppUserProjectPO 住户项目关系PO
     * @author zhangs
     * @createDate 2017-11-16
     */
    List<AppUserProjectPO> getHouseHoldProject(AppUserProjectPO appUserProjectPO);

    /**
     * <desc>
     *      获取该项目是否启用了人脸识别
     * <desc/>
     * @param   projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/03/20
     */
    Integer isStartFaceByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取该项目住户审核模式
     * <desc/>
     * @param   projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2020/04/17
     */
    String getHouseAuthModeByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      单表-获取项目信息
     * <desc/>
     *
     * @param projectId
     * @return
     * @author Juguang.S
     * @createDate 2020/04/24
     */
    ProjectPO getOne(@Param("projectId") String projectId);

    /**
     * <desc>
     *     删除用户
     * <desc/>
     *
     * @param userId
     * @return
     * @author pengwei
     * @createDate 2020/12/16
     */
    void deleteUser(@Param("userId") String userId);

    /**
     * <desc>
     *     删除用户
     * <desc/>
     *
     * @param userId
     * @param projectId
     * @return
     * @author pengwei
     * @createDate 2020/12/16
     */
    void deleteUserProject(@Param("userId") String userId,@Param("projectId") String projectId);

}
